import 'dart:math';
import '../entity/user.dart';
import '../data/images.dart';
import 'user_service.dart';

/// 浏览用户头像管理服务
class ViewerService {
  // 默认头像列表（从MyImages中获取）
  static const List<String> _defaultAvatars = [
    MyImages.anna,
    MyImages.bob,
    MyImages.hugh,
    MyImages.grace,
    MyImages.leo,
    MyImages.ryan,
    MyImages.ethan,
    MyImages.marry,
  ];

  /// 根据分享ID和浏览量生成一致的浏览用户头像列表
  /// [shareId] 分享ID，用于确保同一个分享在不同地方显示相同的头像
  /// [browseCount] 浏览量
  /// [currentUserId] 当前用户ID，如果当前用户浏览过，会显示在前面
  /// [hasCurrentUserViewed] 当前用户是否浏览过这个分享
  static List<UserEntity> generateViewers({
    required String shareId,
    required int browseCount,
    String? currentUserId,
    bool hasCurrentUserViewed = false,
  }) {
    List<UserEntity> viewers = [];

    // 如果浏览量为0，不显示头像
    if (browseCount == 0) {
      return viewers;
    }

    // 使用分享ID作为种子，确保同一个分享总是生成相同的头像序列
    final random = Random(shareId.hashCode);

    // 计算要显示的头像数量：1个浏览量显示1个头像，2个显示2个，3个及以上显示3个
    int displayCount = min(3, browseCount);

    // 如果当前用户浏览过，先添加当前用户头像
    if (hasCurrentUserViewed && currentUserId != null) {
      final currentUser = UserService.getCurrentUser();
      if (currentUser != null && currentUser.id == currentUserId) {
        viewers.add(currentUser);
        displayCount--; // 减少一个位置给其他头像
      }
    }

    // 生成剩余的默认头像
    Set<int> usedIndices = {};
    for (int i = 0; i < displayCount; i++) {
      int avatarIndex;
      do {
        avatarIndex = random.nextInt(_defaultAvatars.length);
      } while (usedIndices.contains(avatarIndex));

      usedIndices.add(avatarIndex);

      // 创建虚拟用户实体
      final viewer = UserEntity(
        id: 'viewer_${shareId}_$avatarIndex',
        username: 'Viewer${avatarIndex + 1}',
        password: '',
        avatar: _defaultAvatars[avatarIndex],
        share: [],
        isVip: false,
        like: [],
      );

      viewers.add(viewer);
    }

    return viewers;
  }
  
  static bool hasCurrentUserViewedShare(String shareId, String? currentUserId) {
    // 如果用户未登录，返回false
    if (currentUserId == null) return false;

    return true;
  }

  /// 获取分享的浏览用户头像列表（用于ShareItem组件）
  static List<UserEntity> getShareViewers({
    required String shareId,
    required int browseCount,
    String? currentUserId,
  }) {
    // 对于列表页面，未登录用户不算浏览过
    // 只有登录用户才可能在浏览头像中显示
    bool hasViewed =
        currentUserId != null &&
        hasCurrentUserViewedShare(shareId, currentUserId);

    return generateViewers(
      shareId: shareId,
      browseCount: browseCount,
      currentUserId: currentUserId,
      hasCurrentUserViewed: hasViewed,
    );
  }

  /// 获取分享详情页的浏览用户头像列表
  /// 在详情页中，登录用户肯定是浏览过的，未登录用户不显示在浏览头像中
  static List<UserEntity> getShareDetailViewers({
    required String shareId,
    required int browseCount,
    String? currentUserId,
  }) {
    // 详情页中，只有登录用户才算浏览过并显示在头像中
    bool hasViewed = currentUserId != null;

    return generateViewers(
      shareId: shareId,
      browseCount: browseCount,
      currentUserId: currentUserId,
      hasCurrentUserViewed: hasViewed,
    );
  }
}
